package P082_CollectionFamily;

import org.junit.Test;

import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
import java.util.Random;
import java.util.TreeSet;

/**
 * @Description : 集合大家族
 *
 **/
public class CollectionFamily {


    /**
     *  offer，add 区别：
     *  一些队列有大小限制，因此如果想在一个满的队列中加入一个新项，多出的项就会被拒绝。
     *  这时新的 offer 方法就可以起作用了。它不是对调用 add() 方法抛出一个 unchecked 异常，而只是得到由 offer() 返回的 false。
     *  poll，remove 区别：
     *  remove() 和 poll() 方法都是从队列中删除第一个元素。remove() 的行为与 Collection 接口的版本相似， 但是新的 poll() 方法在用空集合调用时不是抛出异常，只是返回 null。因此新的方法更适合容易出现异常条件的情况。
     *  peek，element区别：
     *  element() 和 peek() 用于在队列的头部查询元素。与 remove() 方法类似，在队列为空时， element() 抛出一个异常，而 peek() 返回 null
      */
    @Test
    public void test(){
        //只允许在表的前端进行删除操作，而在表的后端进行插入操作
        Queue<Integer> queue = new LinkedList<>();
        Random rand = new Random(47);
        for (int i = 0; i < 10; i++)
            queue.offer(rand.nextInt(i + 10)); // 将一个元素插入到队尾，或者返回 false，这里自动包装机制会自动将 nextInt() 方法的 int 结果转换为 queue 所需的 Integer 对象
        printQ(queue);
    }

    public void printQ(Queue queue) {
        while (queue.peek() != null) // 在不移除的情况下返回队头，队列为空时返回 null
            System.out.print(queue.poll() + "  "); // 移除并返回队头
    }


}
